<?php 

//定义一些常量，存放目录地址，后面要用到它们，只要直接用就好，public是关键字，所以写成这样__PUBLIC__

define('__PUBLIC__', './Public');

define('CONFIG_PATH', './Xbsphp/Config/');

define('CORE_PATH', './Xbsphp/Core/');

define('LIB_PATH', './Xbsphp/Lib/');

//引入核心方法，方法放在Core目录下面，直接用常量CORE_PATH路径连上文件名function.php，引入方法
include CORE_PATH ."function.php";

//魔术方法，实例化一个没有引入类时自动加载，得到类名，查找可能存在类的路径，自动加载时在路径中查找需要引入的类,找到后自动引入。APP_PATH.MODULE.'/Controller/'里的MODULE是自己命名的文件夹，此处命名的叫Index。
function __autoLoad($classname){
	$classPaths=array(
		LIB_PATH,
		CORE_PATH,
		APP_PATH.MODULE.'/Controller/',
		APP_PATH.MODULE.'/Common/',
		APP_PATH.MODULE.'/Model/',
		);

	//循环类可能存在的路径，并判断文件是否存在，如果存在，就引入文件
	foreach ($classPaths as $value) {
		if (file_exists($value.$classname.".class.php")) {
			include $value.$classname.".class.php";
		}
	}
}

//定义常量，地址栏传了三个参数，module（m），controller(c)，action(a),模块，控制器，方法，通过外部传参的方式，m=模块名，c=控制器名，a=方法名，来访问具体方法文件，三元表达式，如果有外部传参，就用外部传的参数，如果没有，就用C方法读系统默认配置里的数据
//模型，控制器，方法，框架里有的，借过来用
define('MODULE', ucfirst(isset($_GET['m']) ? $_GET['m'] : C('DEFAULT_MODULE')));

define('CONTROLLER', ucfirst(isset($_GET['c']) ? $_GET['c'] : C('DEFAULT_CONTROLLER')));

define('ACTION', ucfirst(isset($_GET['a']) ? $_GET['a'] : C('DEFAULT_ACTION')));

//在类里面要使用到对应的功能，操作数据，所以要实例化这个类，类名是常量的话，无法实例化，所以定义一个变量来组一个能被实例化的变量名，变量名是通过路径传过去的，用常量CONTROLLER接，接到之后连上Controller组成对应控制器变量名，控制器的名字是indexController.class.php，假设常量CONTROLLER接到的是index，后面连上Controller，组成控制器名字找到对应控制器。action方法由于写法的原因，会连上个action后缀，不写死的话，在默认配置里设置后缀名，C方法读取系统默认配置。
$controller=CONTROLLER.'Controller';

$action=ACTION.C('DEFAULT_SUFFIX');

$obj=new $controller();

$obj->$action();

 ?>